﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using SushiSOAPServices.Dominio;
using NHibernate;

namespace SushiSOAPServices.Persistencia
{
    public class PedidoDAO : BaseDAO<Pedido, int>
    {
        public Pedido obtenerPedidosPorAtender()
        {
            using (ISession sesion = NHibernateHelper.ObtenerSesion())
            {
                string sentenciaSQL = "select pa from Persona as per, Pedido as ped,  Pago pa where p.Username = :UsrName";
                IQuery query = sesion.CreateQuery(sentenciaSQL);
                IList<Usuario> lista = query.List<Usuario>();
                //if (lista.Count == 0)
                //{
                //    Usuario usu = null;
                //    return usu;
                //}
                //else
                //{
                //    return lista[0];
                //}
                return null;
            }
        }
        public Pedido obtenerPedidoPorEstado(string estado)
        {

            using (ISession sesion = NHibernateHelper.ObtenerSesion())
            {
                string sentenciaSQL = "select p from Pedido as p where p.estado = :estado";
                IQuery query = sesion.CreateQuery(sentenciaSQL);
                query.SetParameter("estado", estado);
                IList<Pedido> lista = query.List<Pedido>();

                if (lista.Count == 0)
                {
                    Pedido pedido = null;
                    return pedido;
                }
                else
                {
                    return lista[0];
                }
            }
        }

        public Pedido obtenerPedidoPorClienteyEstado(int idCliente,string estado)
        {

            using (ISession sesion = NHibernateHelper.ObtenerSesion())
            {
                string sentenciaSQL = "select p from Pedido as p where p.Estado = :estado and p.IdCliente=:id";
                IQuery query = sesion.CreateQuery(sentenciaSQL);
                query.SetParameter("estado", estado);
                query.SetParameter("id", idCliente);
                IList<Pedido> lista = query.List<Pedido>();

                if (lista.Count == 0)
                {
                    Pedido pedido = null;
                    return pedido;
                }
                else
                {
                    return lista[0];
                }
            }
        }

        public Pedido verificarEmail(string email)
        {

            using (ISession sesion = NHibernateHelper.ObtenerSesion())
            {
                string sentenciaSQL = "select p from Pedido as p where p.email = :mail";
                IQuery query = sesion.CreateQuery(sentenciaSQL);
                query.SetParameter("mail", email);
                IList<Pedido> lista = query.List<Pedido>();

                if (lista.Count == 0)
                {
                    Pedido pedido = null;
                    return pedido;
                }
                else
                {
                    return lista[0];
                }
            }
        }

        public int obtenerNuevoId()
        {

            using (ISession sesion = NHibernateHelper.ObtenerSesion())
            {
                string sentenciaSQL = "SELECT isNull(max(IdPedido),0) FROM Pedido";
                IQuery query = sesion.CreateSQLQuery(sentenciaSQL);
                IList<int> id = query.List<int>();

                return (id[0] + 1);
            }
        }
    }
}